//
// Created by LiuYou on 2021/12/6.
//

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>


int main(int argc, char** argv) {
//    std::vector<double> arr{65, 75, 56, 48, 31, 28, 32, 44, 40, 41, 44, 50};
    std::vector<double> arr{65, 75, 56, 44, 31, 28, 32, 44, 100, 88, 46, 50};
    std::copy( arr.begin(), arr.end(), std::ostream_iterator<double>( std::cout, "\t" ));
    std::cout << std::endl;

//    {
//        std::sort( arr.begin(), arr.end());
//        std::copy( arr.begin(), arr.end(), std::ostream_iterator<int>( std::cout, "\t" ));
//        std::cout << std::endl;
//    }

    double average = std::accumulate( arr.begin(), arr.end(), 0.0 ) / arr.size();
    std::cout << "average = " << average << std::endl;

    std::stable_partition( arr.begin(), arr.end(), [&](const auto& item) {
//        return item < average;
        return item <= 46;
    } );
    std::copy( arr.begin(), arr.end(), std::ostream_iterator<double>( std::cout, "\t" ));
    std::cout << std::endl;

    /*
     * todo 笔记: 再补充, 也不是不行。就是使用 stable_partition();的话, predicate 需要的是 <= 而不是 <,
     *  但是此时也是有的行, 有的不行。服了 标准库 提供的这个 分区了。
     *  最终的用法在 Partition4.cpp 文件中。
     */


    return 0;
}
